package ru.urfc.portal.ui.client.controllers.loaders;

import ru.urfc.portal.ui.client.descriptor.GridDescriptor;

import com.extjs.gxt.ui.client.data.BasePagingLoader;
import com.extjs.gxt.ui.client.data.DataProxy;
import com.extjs.gxt.ui.client.data.DataReader;
import com.extjs.gxt.ui.client.data.LoadEvent;
import com.extjs.gxt.ui.client.data.Loader;
import com.extjs.gxt.ui.client.data.ModelData;
import com.extjs.gxt.ui.client.data.PagingLoadResult;
import com.extjs.gxt.ui.client.data.XmlPagingLoadResultReader;
import com.extjs.gxt.ui.client.event.LoadListener;

public class LoaderWithPaging extends BasePagingLoader<PagingLoadResult<ModelData>>
	implements ConfigurableLoader<PagingLoadResult<ModelData>> {

	public LoaderWithPaging(GridDescriptor descriptor) {
		super(null, createReader(descriptor));
	}

	private static DataReader<?> createReader(GridDescriptor descriptor) {
		return new XmlPagingLoadResultReader<PagingLoadResult<ModelData>>(descriptor.getModelType());
	}
	
	public void addLoadListener(final LoaderWithPagingListenter listener) {
		addListener(Loader.Load, new LoadListener() {
			public void loaderLoad(LoadEvent event) {
				PagingLoadResult<ModelData> data = event.getData();
				listener.onLoad(data.getData());
			}
		});
	}	
	
	@SuppressWarnings("unchecked")
	@Override
	public void setProxy(DataProxy<?> proxy) {
		this.proxy = (DataProxy<PagingLoadResult<ModelData>>) proxy;
	}
	
}
